package cn.tedu.thread;
/**本类用于多线程编程实现方案1:继承Thread的方法*/
public class TestThread1 {
    public static void main(String[] args) {
        /**4.new对应的是线程的新建状态
         * 5.想要模拟多线程，至少得启动2个线程，如果启动1个，就是单线程*/
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();
        MyThread t4 = new MyThread();
        /**6.这个run()如果直接这样调用，是没有多线程抢占执行的效果的
         * 只是把业务方法看作普通方法来调用，谁先写，就先执行谁*/
//        t1.run();
//        t2.run();
//        t3.run();
//        t4.run();
        /**7.start()对应的状态才是线程的就绪状态，会把刚刚新建好的线程加入到就绪队列之中
         * 队列中，至于什么时候执行，就是多线程执行的效果，需要等待OS选中分配时间片才会执行
         *8.执行start()时，底层会自动调用我们重写的业务方法run()
         *9. 线程的执行具有随机性，也就是说t1-t4具体怎么执行
         * 取决于CPU的调度时间片的分配规则，我们是决定不了的*/
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class  MyThread extends Thread{
    /**1.多线编程实现方案1:通过继承Thread类，并重写run()来完成的*/
    @Override
    public void run(){
        /**2.super.run()表示这里调用的是父类的业务，但现在我们想用自己的业务，所以注释掉*/
//        super.run();
        for (int i = 0; i <10 ; i++) {
            /**3.getName()表示可以获取当前正在执行的线程名称
             * 由于本类继承了Thread类，所以可以直接使用Thread提供的方法*/
            System.out.println(i+"="+getName());
        }
    }
}